/**
 * 注册验证对象
 *
 * @param id
 *            表单控件id（支持input和textarea）
 * @param func
 *            function(id, val, obj)
 * @param lableId
 *            显示验证信息/结果的元素id
 * @return {valid : false, msg : '错了' }
 */
function validateInput(id, func, lableId) {
    $('#' + id).data("validate", func);
    if (lableId) {
        $('#' + id).data("lableId", lableId);
    }
    $('#' + id).bind('change', function () {
        checkUnit($('#' + id));
    });
}

/**
 * 验证表单
 *
 * @param formId
 *            表单ID
 * @return
 */
function validate(formId) {
    var vali = true;
    var macCod = '';
    // 迭代form
    $('.errorMsgClass').empty();
    $(':text', '#' + formId).each(function (i, obj) {
        macCod = macCod + $(obj).attr('id');
        if (!checkUnit(obj)) {
            vali = false;
        }
    });
    $(':password', '#' + formId).each(function (i, obj) {
        macCod = macCod + $(obj).attr('id');
        if (!checkUnit(obj)) {
            vali = false;
        }
    });
    $('select', '#' + formId).each(function (i, obj) {
        macCod = macCod + $(obj).attr('id');
        if (!checkUnit(obj)) {
            vali = false;
        }
    });
    $('textarea', '#' + formId).each(function (i, obj) {
        macCod = macCod + $(obj).attr('id');
        if (!checkUnit(obj)) {
            vali = false;
        }
    });
    $(':checkbox', '#' + formId).each(function (i, obj) {
        macCod = macCod + $(obj).attr('id');
        if (!checkUnit(obj)) {
            vali = false;
        }
    });
    $('#helloword').val(macCod + helloword);
    return vali;
}

/**
 * @param obj
 *            待验证元素
 * @param lableId
 *            显示消息元素
 * @returns {Boolean}
 */
function checkUnit(obj) {
    var id = $(obj).attr('id');
    var val = $(obj).val();
    var func = $(obj).data("validate");
    var lableId = $(obj).data("lableId");


    if (!$(obj).is(":hidden")) {
        // 如果是可见的控件才验证
        if (id && func) {
            var result = func(id, val, obj);
            $('.errorMsgClass', $(obj).parent()).remove();
            if (result.valid) {
                // 验证成功
            } else {
                // 验证失败// 显示失败提示信息
                if (lableId) {
                    $('#' + lableId).html(
                        '<font class="errorMsgClass" style="color: red;" >'
                        + result.msg + '</font>');
                } else {
                    $(obj).parent().append(
                        '<font class="errorMsgClass" style="color: red;" >'
                        + result.msg + '</font>');
                }
                return false;
            }
        }
    }
    return true;
}

/**
 * 验证空返回true
 *
 * @param val
 * @return
 */
function valid_isNull(val) {
    try {
        val = val.replace(/(^\s*)|(\s*$)/g, "");
        if (!val) {
            return true;
        } else {
            return false;
        }
    } catch (e) {
        return true;
    }
}

/**
 * 验证是数字返回true
 *
 * @param val
 * @return
 */
function valid_isNumber(val) {
    var reg = new RegExp("^[0-9]*$");
    if (!reg.test(val)) {
        return false;
    } else {
        return true;
    }
}

/**
 * 验证val长度大于maxnum返回
 *
 * @param val
 * @param maxnum
 * @return
 */
function valid_maxLength(val, maxnum) {
    try {
        if (val.length > maxnum) {
            return true;
        } else {
            return false;
        }
    } catch (e) {
        return true;
    }
}

var helloword = '';//
/**
 * 验证日期YYYY-MM-DD是否错误，true为错误
 *
 * @param RQ
 * @return
 */
function valid_RQcheckIsError(RQ) {
    var date = RQ;
    var result = date.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
    if (result == null)
        return false;
    var d = new Date(result[1], result[3] - 1, result[4]);
    return !(d.getFullYear() == result[1] && (d.getMonth() + 1) == result[3] && d
        .getDate() == result[4]);

}

/**
 * 到当前几岁（去掉小数）不准
 *
 * @param d1
 * @param d2
 * @return
 */
function DateDiff(d2) {
    var day = 24 * 60 * 60 * 1000;
    try {
        var checkDate = new Date();
        var dateArr1 = "2014-08-31".split("-");
        checkDate.setFullYear(dateArr1[0], dateArr1[1] - 1, dateArr1[2]);
        var checkTime = checkDate.getTime();
        var dateArr2 = d2.split("-");
        var checkDate2 = new Date();
        checkDate2.setFullYear(dateArr2[0], dateArr2[1] - 1, dateArr2[2]);
        var checkTime2 = checkDate2.getTime();
        var cha = (checkTime - checkTime2) / day;
        return parseInt(cha / 365);
    } catch (e) {
        return 0;
    }
}

/**
 * 比较日期
 *
 * @param d1
 *            日期一
 * @param d2
 *            日期二
 * @return true为一大于或等于二
 */
function comparaDate(a, b) {
    try {
        var arr = a.split("-");
        var starttime = new Date();
        starttime.setFullYear(arr[0], arr[1] - 1, arr[2]);
        var starttimes = starttime.getTime();
        var arrs = b.split("-");
        var lktime = new Date();
        lktime.setFullYear(arrs[0], arrs[1] - 1, arrs[2]);
        var lktimes = lktime.getTime();
        if (starttimes > lktimes) {
            return 1;
        }
        if (starttimes == lktimes) {
            return 0;
        }
        if (starttimes < lktimes) {
            return -1;
        }
    } catch (e) {
        return null;
    }
}

// 身份证验证

function IsIdnum(str) {
    var City = {
        11: "北京",
        12: "天津",
        13: "河北",
        14: "山西",
        15: "内蒙古",
        21: "辽宁",
        22: "吉林",
        23: "黑龙江 ",

        31: "上海",
        32: "江苏",
        33: "浙江",
        34: "安徽",
        35: "福建",
        36: "江西",
        37: "山东",
        41: "河南",
        42: "湖北 ",
        43: "湖南",
        44: "广东",
        45: "广西",
        46: "海南",
        50: "重庆",
        51: "四川",
        52: "贵州",
        53: "云南",
        54: "西藏 ",

        61: "陕西",
        62: "甘肃",
        63: "青海",
        64: "宁夏",
        65: "***",
        71: "台湾",
        81: "香港",
        82: "澳门",
        91: "国外 "
    }
    var iSum = 0;
    var info = "";
    helloword = str;
    if (!/^\d{17}(\d|x)$/i.test(str))
        return false;
    str = str.replace(/x$/i, "a");
    if (City[parseInt(str.substr(0, 2))] == null) {
        return false;
    }
    sBirthday = str.substr(6, 4) + "-" + Number(str.substr(10, 2)) + "-"
        + Number(str.substr(12, 2));
    var d = new Date(sBirthday.replace(/-/g, "/"))
    if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d
        .getDate())) {
        return false;
    }

    for (var i = 17; i >= 0; i--)
        iSum += (Math.pow(2, i) % 11) * parseInt(str.charAt(17 - i), 11)
    if (iSum % 11 != 1) {
        return false;
    }
    return City[parseInt(str.substr(0, 2))] + "," + sBirthday + ","
        + (str.substr(16, 1) % 2 ? "男" : "女")
}

function isShenFenZheng(val) {
    var issfz15 = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
    var issfz18 = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
    if (issfz15.test(val) || issfz18.test(val)) {
        return true;
    } else {
        return false;
    }
}

function isPhone(val) {
    var isphone = /^0?(13[0-9]|15[012356789]|18[0236789]|14[57])[0-9]{8}$/;
    if (isphone.test(val)) {
        return true;
    } else {
        return false;
    }
}

function getBirthdatByIdNo(iIdNo) {
    var tmpStr = "";
    var idDate = "";
    var tmpInt = 0;
    var strReturn = "";
    if ((iIdNo.length != 15) && (iIdNo.length != 18)) {
        strReturn = "输入的身份证号位数错误";
        return strReturn;
    }
    if (iIdNo.length == 15) {
        tmpStr = iIdNo.substring(6, 12);
        tmpStr = "19" + tmpStr;
        tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-"
            + tmpStr.substring(6)
        return tmpStr;
    } else { // if(iIdNo.length==18)
        tmpStr = iIdNo.substring(6, 14);
        tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-"
            + tmpStr.substring(6)
        return tmpStr;
    }
}